﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CPEBookWin
{
    public partial class MasterForm : Form
    {
        #region Variables locales
        private AjoutStatutControl statutControl = null;
        private int nbRow = 0;
        private string page = "Mur";
        private TitreWidgetControl titreAddWidget;
        #endregion

        #region Propriétés
        public UtilisateurWebService.UtilisateurEWS utilisateur { get; set; }
        public int idUtilisateurProfil { get; set; }
        public TableLayoutPanel tablePanelPrincipal { get; set; }
        #endregion

        #region Constructeur
        public MasterForm()
        {
            InitializeComponent();
        }
        #endregion

        #region Evénements
        /// <summary>
        /// Recherche
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRecherche_Click(object sender, EventArgs e)
        {
            if (txtRecherche.Text != "")
                afficherRecherche();
        }

        /// <summary>
        /// Retour à la page d'accueil
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkAccueil_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            afficherMur();
        }

        /// <summary>
        /// Affichage du profil de l'utilisateur
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkProfil_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            idUtilisateurProfil = utilisateur.idutilisateur;
            afficherProfil();
        }

        /// <summary>
        ///  Deconnexion de l'utilisateur
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkDeconnexion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            panelPrincipal.Controls.Clear();
            connexion();
        }

        /// <summary>
        /// Ajout d'un statut sur la page du Mur
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void boutonAjouter_Click_Mur(object sender, EventArgs e)
        {
            if (statutControl.Texte != "")
            {
                ajouterActualite(statutControl.Texte);
                afficherMur();
                statutControl.textStatut.Focus();
            }
        }

        /// <summary>
        /// Ajout d'un statut sur la page du Profil
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void boutonAjouter_Click_Profil(object sender, EventArgs e)
        {
            if (statutControl.Texte != "")
            {
                ajouterActualite(statutControl.Texte);
                afficherProfil();
                statutControl.textStatut.Focus();
            }
        }

        /// <summary>
        /// Evenement appelé lors d'un clic sur le bouton d'edition du profil
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkLabelModifProfil_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            afficherEditionProfil();
        }

        /// <summary>
        /// Evenement appelé lors d'un clic sur le bouton d'edition du profil
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BoutonModifierProfil_Click(object sender, EventArgs e)
        {
            if (((Button)sender).Tag.ToString() == "EditionProfil")
                afficherEditionProfil();
            else
            {
                AmisWebService.AmisWSSoapClient amisWebService = WebServiceContext.amisWebService;
                if (((Button)sender).Tag.ToString() == "DemandeAmitie")
                    amisWebService.demandeAmitie(utilisateur.idutilisateur, idUtilisateurProfil);
                else if (((Button)sender).Tag.ToString() == "ConfirmeAmitie")
                    amisWebService.confirmerDemande(utilisateur.idutilisateur, idUtilisateurProfil);
                else if (((Button)sender).Tag.ToString() == "SupprimerAmis")
                    amisWebService.supprimerAmitie(utilisateur.idutilisateur, idUtilisateurProfil);

                reloadLeftPanel();
                reloadMiddlePanel();
            }
        }

        private void lblUserName_Click(object sender, EventArgs e)
        {
            idUtilisateurProfil = utilisateur.idutilisateur;
            afficherProfil();
        }

        void linkLabelUser_Click(object sender, EventArgs e)
        {
            int idutilisateur;
            if (Int32.TryParse(((LinkLabel)sender).Tag.ToString(), out idutilisateur))
            {
                idUtilisateurProfil = idutilisateur;
                afficherProfil();
            }
        }


        private void txtRecherche_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                btnRecherche.PerformClick();
                e.Handled = true;
            }
        }

        /// <summary>
        /// Evenement à l'affichage de la form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MasterForm_Shown(object sender, EventArgs e)
        {
            connexion();
        }
        #endregion

        #region Méthodes d'affichage

        /// <summary>
        /// Methode pour afficher la page de profil d'un utilisateur
        /// </summary>
        /// <param name="idUtilisateurProfil">ID de l'utilisateur à afficher</param>
        public void afficherProfil()
        {
            // Passe le curseur en sablier
            this.UseWaitCursor = true;

            // Recharge le panneau de gauche
            page = "Profil";

            // Nettoi les controls du panel principal
            panelPrincipal.Controls.Clear();
            nbRow = 0;

            // Defini la table pour la mise en forme
            tablePanelPrincipal = new TableLayoutPanel();
            tablePanelPrincipal.ColumnCount = 1;
            tablePanelPrincipal.AutoSize = true;
            tablePanelPrincipal.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;

            // Ajout les infos du profil
            if (!afficherInfosProfil())
            {
                // Definition d'un control Titre
                TitreControl titre = new TitreControl();
                titre.Titre = "Dernières mises à jour";

                // Ajout du control à la table de mise en forme
                tablePanelPrincipal.Controls.Add(titre, 0, nbRow);
                nbRow++;

                if (idUtilisateurProfil == utilisateur.idutilisateur)
                {
                    // Defini le control Statut
                    statutControl = new AjoutStatutControl();

                    // Gestion de l'événement d'ajout d'un statut
                    statutControl.boutonAjouter.Click += new EventHandler(boutonAjouter_Click_Profil);

                    // Ajout du control à la table de mise en forme
                    tablePanelPrincipal.Controls.Add(statutControl, 0, nbRow);
                    nbRow++;
                }

                // Ajoute les actualites du Profil
                afficherActualitesDuProfil();
            }
            reloadLeftPanel();

            // Ajout de la table au panel
            panelPrincipal.Controls.Add(tablePanelPrincipal);

            // Passe le curseur en normal
            this.UseWaitCursor = false;
        }

        /// <summary>
        /// Methode pour afficher les infos du profil
        /// </summary>
        /// <param name="idUtilisateurProfil">id utilisateur à afficher</param>
        private bool afficherInfosProfil()
        {
            UtilisateurWebService.UtilisateurWSSoapClient utilisateurWebService = WebServiceContext.utilisateurWebService;
            ActualiteWebService.UtilisateurEWS utilisateurActualite = new ActualiteWebService.UtilisateurEWS();
            bool affichageLimite = false;

            // Configuration de l'utilisateur pour les droits
            utilisateurActualite.email = utilisateur.email;
            utilisateurActualite.password = utilisateur.password;

            tablePanelPrincipal.Controls.Add(genereInfosProfil(idUtilisateurProfil, out affichageLimite), 0, nbRow);
            nbRow++;

            return affichageLimite;
        }

        /// <summary>
        /// Méthode qui affiche les actualites sur le mur
        /// </summary>
        private void afficherActualitesDuProfil()
        {
            // Utilisation des webservices
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
            UtilisateurWebService.UtilisateurWSSoapClient utilisateurWebService = WebServiceContext.utilisateurWebService;
            ActualiteWebService.UtilisateurEWS utilisateurActualite = new ActualiteWebService.UtilisateurEWS();

            // Configuration de l'utilisateur pour les droits
            utilisateurActualite.email = utilisateur.email;
            utilisateurActualite.password = utilisateur.password;

            // Recuperation des actualites des profils
            ActualiteWebService.ActualiteEWS[] actualites = actualiteWebService.getActualiteDuProfil(utilisateurActualite, idUtilisateurProfil);
            if (actualites != null)
            {
                foreach (ActualiteWebService.ActualiteEWS actualite in actualites)
                {
                    // Ajout du control d'actualite
                    tablePanelPrincipal.Controls.Add(genereActualiteControl(actualite), 1, nbRow);
                    nbRow++;
                }
            }
        }

        /// <summary>
        /// Methode d'affichage de la page du Mur
        /// </summary>
        private void afficherMur()
        {
            // Passe le curseur en sablier
            this.UseWaitCursor = true;

            // Recharge le panneau de gauche
            page = "Mur";
            reloadLeftPanel();
            
            // Nettoi les controls du panel principal
            panelPrincipal.Controls.Clear();
            nbRow = 0;

            // Defini le control Statut
            statutControl = new AjoutStatutControl();

            // Defini la table pour la mise en forme
            tablePanelPrincipal = new TableLayoutPanel();
            tablePanelPrincipal.ColumnCount = 1;
            tablePanelPrincipal.AutoSize = true;
            tablePanelPrincipal.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;

            // Gestion de l'événement d'ajout d'un statut
            statutControl.boutonAjouter.Click += new EventHandler(boutonAjouter_Click_Mur);

            // Definition d'un control Titre
            TitreControl titre = new TitreControl();
            titre.Titre = "Fil d'actualité";

            // Ajout du control à la table de mise en forme
            tablePanelPrincipal.Controls.Add(titre, 0, nbRow);
            nbRow++;

            // Ajout du control à la table de mise en forme
            tablePanelPrincipal.Controls.Add(statutControl, 0, nbRow);
            nbRow++;

            // Ajoute les actualites du Mur
            afficherActualitesDuMur();

            // Ajout de la table au panel
            panelPrincipal.Controls.Add(tablePanelPrincipal);

            // Passe le curseur en normal
            this.UseWaitCursor = false;
        }

        /// <summary>
        /// Méthode qui affiche les actualites sur le mur
        /// </summary>
        private void afficherActualitesDuMur()
        {
            // Declaration des webservice
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
            ActualiteWebService.ActualiteEWS[] actualites = actualiteWebService.getActualiteDuMur(utilisateur.idutilisateur);

            if (actualites != null)
            {
                foreach (ActualiteWebService.ActualiteEWS actualite in actualites)
                {
                    // affichage de l'actualite dans un control personnalisé
                    tablePanelPrincipal.Controls.Add(genereActualiteControl(actualite), 0, nbRow);
                    nbRow++;
                }
            }
        }

        /// <summary>
        /// Methode d'affichage de l'edition du profil
        /// </summary>
        private void afficherEditionProfil()
        {
            // Passe le curseur en sablier
            this.UseWaitCursor = true;

            // Recharge le panneau de gauche
            page = "EditionProfil";
            reloadLeftPanel();

            // Nettoi les controls du panel principal
            panelPrincipal.Controls.Clear();

            panelPrincipal.Controls.Add(genereEditionProfil());

            // Passe le curseur en sablier
            this.UseWaitCursor = false;
        }

        /// <summary>
        /// Methode d'affichage des demandes d'amis en attente
        /// </summary>
        private void afficherDemandeEnAttente()
        {
            AmisWebService.AmisWSSoapClient amisWebService = WebServiceContext.amisWebService;
            AmisWebService.AmitieUtilisateurEWS[] listAmitieUtilisateur = amisWebService.getDemandeAjout(utilisateur.idutilisateur);
            if (listAmitieUtilisateur != null)
            {
                DemandeAttenteControl demandeAttenteControl;
                TableLayoutPanel tableLayout = new TableLayoutPanel();
                TitreWidgetControl titreWidget = new TitreWidgetControl();
                titreWidget.texte = "Demandes d'ajout";;
                titreWidget.isAdd = true;
                panelGaucheMilieu.Controls.Clear();

                int nbRow = 0;
                tableLayout.Controls.Add(titreWidget, 1, nbRow++);

                foreach (AmisWebService.AmitieUtilisateurEWS amitieUtilisateur in listAmitieUtilisateur)
                {
                    demandeAttenteControl = new DemandeAttenteControl();
                    demandeAttenteControl.idutilisateur = amitieUtilisateur.Utilisateur.idutilisateur;
                    demandeAttenteControl.username = amitieUtilisateur.Utilisateur.prenom + " " + amitieUtilisateur.Utilisateur.nom;
                    demandeAttenteControl.utilisateur = utilisateur;
                    tableLayout.Controls.Add(demandeAttenteControl, 1, nbRow++);

                }
                tableLayout.MaximumSize = new System.Drawing.Size(150, 3000);
                tableLayoutPanelGauche.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
                tableLayout.AutoSize = true;
                panelGaucheMilieu.Controls.Add(tableLayout);
            }
            
        }

        /// <summary>
        /// Methode pour afficher la liste des amis dans le panel de gauche
        /// </summary>
        /// <param name="idutilisateur"></param>
        private void afficherListeAmis(int idutilisateur)
        {
            AmisWebService.AmisWSSoapClient amisWebService = WebServiceContext.amisWebService;
            AmisWebService.AmitieUtilisateurEWS[] listAmitieUtilisateur = amisWebService.getAmities(idutilisateur);
            
            LinkLabel linkLabelUser;
            TableLayoutPanel tableLayout = new TableLayoutPanel();
            tableLayout.MaximumSize = new System.Drawing.Size(150, 30000);
            tableLayoutPanelGauche.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            tableLayout.AutoSize = true;

            titreAddWidget = new TitreWidgetControl();
            titreAddWidget.isAdd = false;
            titreAddWidget.Name = "titreAddWidget";

            if (utilisateur.idutilisateur == idutilisateur)
                titreAddWidget.texte = "Vos amis";
            else
                titreAddWidget.texte = "Ses amis";

            panelGaucheBas.Controls.Clear();

            int nbRow = 0;
            tableLayout.Controls.Add(titreAddWidget, 1, nbRow++);

            if (listAmitieUtilisateur != null)
            {
                foreach (AmisWebService.AmitieUtilisateurEWS amitieUtilisateur in listAmitieUtilisateur)
                {
                    linkLabelUser = new LinkLabel();
                    linkLabelUser.Text = amitieUtilisateur.Utilisateur.prenom + " " + amitieUtilisateur.Utilisateur.nom;
                    linkLabelUser.Tag = amitieUtilisateur.Utilisateur.idutilisateur.ToString();

                    linkLabelUser.LinkColor = Color.FromArgb(0, 0, 192);
                    linkLabelUser.Click += new EventHandler(linkLabelUser_Click);
                    tableLayout.Controls.Add(linkLabelUser, 1, nbRow++);
                }
            }
            else
            {
                Label label = new Label();
                label.Text = "Aucun ami";
                tableLayout.Controls.Add(label, 1, nbRow++);
            }

            panelGaucheBas.Controls.Add(tableLayout); 
        }

        /// <summary>
        /// Méthode pour afficher les résultats de la recherche
        /// </summary>
        private void afficherRecherche()
        {
            // Passe le curseur en sablier
            this.UseWaitCursor = true;

            // Recharge le panneau de gauche
            page = "Recherche";
            reloadLeftPanel();
            
            // Nettoi les controls du panel principal
            panelPrincipal.Controls.Clear();
            nbRow = 0;

            // Defini la table pour la mise en forme
            tablePanelPrincipal = new TableLayoutPanel();
            tablePanelPrincipal.ColumnCount = 1;
            tablePanelPrincipal.AutoSize = true;
            tablePanelPrincipal.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;

            UtilisateurWebService.UtilisateurWSSoapClient utilisateurWebService = WebServiceContext.utilisateurWebService;
            AmisWebService.AmisWSSoapClient amisWebService = WebServiceContext.amisWebService;

            // Definition d'un control Titre
            TitreControl titre = new TitreControl();
            titre.Titre = "Resultat de la recherche \"" + txtRecherche.Text + "\"";

            // Ajout du control à la table de mise en forme
            tablePanelPrincipal.Controls.Add(titre, 0, nbRow);
            nbRow++;

            
            UtilisateurWebService.UtilisateurEWS[] listUtilisateurs = utilisateurWebService.rechercherUtilisateurs(txtRecherche.Text);

            if (listUtilisateurs != null)
            {
                foreach (UtilisateurWebService.UtilisateurEWS utilisateurResult in listUtilisateurs)
                {
                    // Ajout du control à la table de mise en forme
                    tablePanelPrincipal.Controls.Add(genereResultatRecherche(utilisateurResult, amisWebService.getAmitie(utilisateur.idutilisateur, utilisateurResult.idutilisateur)), 0, nbRow);
                    nbRow++;
                }
            }
            else
            {
                Label lblResult = new Label();
                lblResult.Text = "Pas de résultat";

                // Ajout du control à la table de mise en forme
                tablePanelPrincipal.Controls.Add(lblResult, 0, nbRow);
                nbRow++;
            }

            // Ajout de la table au panel
            panelPrincipal.Controls.Add(tablePanelPrincipal);

            // Passe le curseur en sablier
            this.UseWaitCursor = false;
        }

        /// <summary>
        ///  Methode permettant de recharger le panel gauche
        /// </summary>
        public void reloadLeftPanel()
        {
            lblUserName.Text = utilisateur.prenom + " " + utilisateur.nom;
            panelGaucheBas.Controls.Clear();
            panelGaucheMilieu.Controls.Clear();
            afficherDemandeEnAttente();

            if (page == "Profil")
            {
                afficherListeAmis(idUtilisateurProfil);
            }
        }

        /// <summary>
        ///  Methode permettant de recharger le panel principal
        /// </summary>
        public void reloadMiddlePanel()
        {
            if (page == "Mur")
                afficherMur();
            else if (page == "EditionProfil")
                afficherEditionProfil();
            else if (page == "Profil" || page == "ProfilLimite")
                afficherProfil();
        }
        #endregion

        #region Méthode de gestion
        /// <summary>
        /// Methode permettant d'ajouter une nouvelle actualité
        /// </summary>
        /// <param name="statut">statut à ajouter</param>
        private void ajouterActualite(string statut)
        {
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
            actualiteWebService.ajouterActualite(utilisateur.idutilisateur, statut, DateTime.Now);
        }

        /// <summary>
        /// Methode appelée lors de la connexion à l'application
        /// </summary>
        private void connexion()
        {
            utilisateur = null;
            Login loginDialog = new Login();

            this.Enabled = false;
            DialogResult dr = loginDialog.ShowDialog(this);
            if (dr == System.Windows.Forms.DialogResult.Cancel)
                this.Close();
            else
            {
                lblUserName.Text = utilisateur.prenom + " " + utilisateur.nom;
                this.Enabled = true;
                afficherMur();
                txtRecherche.Text = "";
            }
        }
        #endregion

        #region Generation des controls personnalisés
        /// <summary>
        /// Methode pour générer un control actualite à partir d'une ActualiteEWS
        /// </summary>
        /// <param name="actualite">Actualite EWS</param>
        /// <returns>Control Actualite</returns>
        public ActualiteControl genereActualiteControl (ActualiteWebService.ActualiteEWS actualite)
        {
            // Defini le web service ActualiteWS
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;

            // Creation du control personnalisé
            ActualiteControl actualiteControl = new ActualiteControl();

            // Ajoute les propriété du controle
            actualiteControl.utilisateurActu = actualite.Utilisateur;
            actualiteControl.statut = actualite.Statut.texte;
            actualiteControl.nbaime = actualite.nbAime;

            // Test si l'utilisateur courant aime le staut
            actualiteControl.vousaimez = actualiteWebService.aimeStatut(actualite.Statut.idstatut, utilisateur.idutilisateur);
            actualiteControl.date = actualite.Statut.date;
            actualiteControl.utilisateur = utilisateur;
            actualiteControl.idstatut = actualite.Statut.idstatut;

            if (actualite.Utilisateur.idutilisateur == utilisateur.idutilisateur)
            {
                actualiteControl.BoutonSupprimer.Visible = true;
                actualiteControl.BoutonSupprimer.Enabled = true;
            }

            // Generation des commentaires
            actualiteControl.addCommentaires(actualite.Commentaires);

            return actualiteControl;
        }

        /// <summary>
        /// Methode pour générer le control InfosProfil a partir de l'idutilisateur
        /// </summary>
        /// <param name="idutilisateur">id de l'utilisateur à afficher</param>
        /// <returns>Control InfosProfil</returns>
        public InfosProfilControl genereInfosProfil(int idutilisateur, out bool affichageLimite)
        {
            UtilisateurWebService.UtilisateurWSSoapClient utilisateurWebService = WebServiceContext.utilisateurWebService;
            ActualiteWebService.UtilisateurEWS utilisateurActualite = new ActualiteWebService.UtilisateurEWS();

            // Configuration de l'utilisateur pour les droits
            utilisateurActualite.email = utilisateur.email;
            utilisateurActualite.password = utilisateur.password;
 
            UtilisateurWebService.UtilisateurEWS utilisateurProfil = utilisateurWebService.getUtilisateur(utilisateur, idutilisateur);
            if (utilisateurProfil != null)
            {
                // Affichage des infos du profil
                InfosProfilControl infosProfilControl = new InfosProfilControl();
                infosProfilControl.Username = utilisateurProfil.prenom + " " + utilisateurProfil.nom;
                infosProfilControl.Age = utilisateurWebService.calculerAge(utilisateurProfil.datenaissance).ToString() + " ans";
                infosProfilControl.Filliere = utilisateurProfil.filliere;
                infosProfilControl.Promotion = utilisateurProfil.promotion.ToString();

                if (utilisateur.idutilisateur == utilisateurProfil.idutilisateur)
                {
                    infosProfilControl.BoutonModifierProfil.Visible = true;
                    infosProfilControl.BoutonModifierProfil.Click += new EventHandler(BoutonModifierProfil_Click);
                    infosProfilControl.BoutonModifierProfil.Tag = "EditionProfil";
                }
                else
                {
                    infosProfilControl.BoutonModifierProfil.Text = "Supprimer de mes amis";
                    infosProfilControl.BoutonModifierProfil.Visible = true;
                    infosProfilControl.BoutonModifierProfil.Click += new EventHandler(BoutonModifierProfil_Click);
                    infosProfilControl.BoutonModifierProfil.Tag = "SupprimerAmis";
                }

                if (utilisateurProfil.sexe == 'M')
                    infosProfilControl.Sexe = "masculin";
                else
                    infosProfilControl.Sexe = "féminin";

                infosProfilControl.Email = utilisateurProfil.email;

                affichageLimite = false;

                return infosProfilControl;
            }
            else
            {
                AmisWebService.AmisWSSoapClient amisWebService = WebServiceContext.amisWebService;
                utilisateurProfil = utilisateurWebService.getAffichageUtilisateur(idutilisateur);
                if (utilisateurProfil != null)
                {
                    // Affichage des infos du profil
                    InfosProfilControl infosProfilControl = new InfosProfilControl();
                    infosProfilControl.Username = utilisateurProfil.prenom + " " + utilisateurProfil.nom;
                    infosProfilControl.Filliere = utilisateurProfil.filliere;
                    infosProfilControl.Promotion = utilisateurProfil.promotion.ToString();

                    AmisWebService.AmitieUtilisateurEWS amitieUtilisateur = amisWebService.getAmitie(utilisateur.idutilisateur, idUtilisateurProfil);
                    infosProfilControl.BoutonModifierProfil.Visible = true;
                    infosProfilControl.BoutonModifierProfil.Click += new EventHandler(BoutonModifierProfil_Click);

                    if (amitieUtilisateur == null)
                    {
                        infosProfilControl.BoutonModifierProfil.Text = "Demander en ami";
                        infosProfilControl.BoutonModifierProfil.Tag = "DemandeAmitie";
                    }
                    else if (amitieUtilisateur.Amitie.etat == Entity.AmitieEtat.DEMANDEUR)
                    {
                        infosProfilControl.BoutonModifierProfil.Text = "Demande envoyée";
                        infosProfilControl.BoutonModifierProfil.Enabled = false;
                    }
                    else if (amitieUtilisateur.Amitie.etat == Entity.AmitieEtat.RECEVEUR)
                    {
                        infosProfilControl.BoutonModifierProfil.Text = "Accepter la demande";
                        infosProfilControl.BoutonModifierProfil.Tag = "ConfirmeAmitie";
                    }


                    if (utilisateurProfil.sexe == 'M')
                        infosProfilControl.Sexe = "masculin";
                    else
                        infosProfilControl.Sexe = "féminin";

                    infosProfilControl.affichageApercu();

                    affichageLimite = true;

                    // Recharge le panneau de gauche
                    page = "ProfilLimite";

                    return infosProfilControl;
                }
            }

            affichageLimite = false;
            return null;
        }

        /// <summary>
        /// Methode pour générer un control Edition Profil
        /// </summary>
        /// <returns></returns>
        public EditionProfilControl genereEditionProfil()
        {
            EditionProfilControl editionProfilControl = new EditionProfilControl();
            editionProfilControl.utilisateur = utilisateur;
            editionProfilControl.idutilisateur = utilisateur.idutilisateur;
            editionProfilControl.InitForm();

            return editionProfilControl;
        }

        public ResultatRechercheControl genereResultatRecherche(UtilisateurWebService.UtilisateurEWS utilisateurResult, AmisWebService.AmitieUtilisateurEWS amitieUtilisateur)
        {
            AmisWebService.AmitieEWS amitie = null;
            ResultatRechercheControl resultatRechercheControl = new ResultatRechercheControl();
            resultatRechercheControl.idutilisateur = utilisateurResult.idutilisateur;
            resultatRechercheControl.utilisateur = utilisateur;
            resultatRechercheControl.username = utilisateurResult.prenom + " " + utilisateurResult.nom;
            resultatRechercheControl.informations = "Sexe " + (utilisateurResult.sexe == 'M' ? "masculin" : "féminin") + ", fillière " + utilisateurResult.filliere + " promotion " + utilisateurResult.promotion.ToString();

            if (amitieUtilisateur != null)
                amitie = amitieUtilisateur.Amitie;

            if (amitie != null)
            {
                resultatRechercheControl.etatamitie = amitie.etat;
            }
            else
                resultatRechercheControl.etatamitie = ' ';

            return resultatRechercheControl;
        }
        #endregion




    }
}
